package org.albianj.cached.impl.lcached;

public class LinkedListNode {

	public LinkedListNode previous;
	public LinkedListNode next;
	public Object object;

	/**
	 * This class is further customized for the CoolServlets cache system. It
	 * maintains a timestamp of when a Cacheable object was first added to
	 * cache. Timestamps are stored as long values and represent the number of
	 * milleseconds passed since January 1, 1970 00:00:00.000 GMT.
	 * <p>
	 * <p/>
	 * The creation timestamp is used in the case that the cache has a maximum
	 * lifetime set. In that case, when [current time] - [creation time] > [max
	 * lifetime], the object will be deleted from cache.
	 */
	public long timestamp;
	public long creationTimes;

	/**
	 * Constructs a new linked list node.
	 * 
	 * @param object
	 *            the Object that the node represents.
	 * @param next
	 *            a reference to the next LinkedListNode in the list.
	 * @param previous
	 *            a reference to the previous LinkedListNode in the list.
	 */
	public LinkedListNode(Object object, LinkedListNode next,
			LinkedListNode previous) {
		this.object = object;
		this.next = next;
		this.previous = previous;
	}

	/**
	 * Removes this node from the linked list that it is a part of.
	 */
	public void remove() {
		previous.next = next;
		next.previous = previous;
	}

	/**
	 * Returns a String representation of the linked list node by calling the
	 * toString method of the node's object.
	 * 
	 * @return a String representation of the LinkedListNode.
	 */
	public String toString() {
		return object == null ? "null" : object.toString();
	}
}

// Read more:
// http://kickjava.com/src/org/jivesoftware/util/LinkedListNode.java.htm#ixzz1WZ7Eo2MS